home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2008 February / PCWFEB08.iso / Software / Freeware / Miro 1.0 / Miro_Installer.exe / Miro_Downloader.exe / searchengines.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2007-11-12  |  5.7 KB  |  201 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.5)
  3.  
  4. import views
  5. import indexes
  6. import re
  7. import template
  8. from util import getSingletonDDBObject, checkU, returnsUnicode
  9. from database import DDBObject
  10. from xhtmltools import urlencode
  11. from templatehelper import quoteattr, escape
  12. from xml.dom.minidom import parse
  13. import resources
  14. import os
  15. import config
  16. import prefs
  17. import logging
  18.  
  19. class SearchEngine(DDBObject):
  20.     
  21.     def __init__(self, name, title, url, sortOrder = 0):
  22.         checkU(name)
  23.         checkU(title)
  24.         checkU(url)
  25.         self.name = name
  26.         self.title = title
  27.         self.url = url
  28.         self.sortOrder = sortOrder
  29.         DDBObject.__init__(self)
  30.  
  31.     
  32.     def getRequestURL(self, query, filterAdultContents, limit):
  33.         requestURL = self.url.replace(u'%s', urlencode(query))
  34.         requestURL = requestURL.replace(u'%a', unicode(int(not filterAdultContents)))
  35.         requestURL = requestURL.replace(u'%l', unicode(int(limit)))
  36.         return requestURL
  37.  
  38.  
  39.  
  40. def deleteEngines():
  41.     for engine in views.searchEngines:
  42.         engine.remove()
  43.     
  44.  
  45.  
  46. def searchForSearchEngines(dir):
  47.     engines = { }
  48.     
  49.     try:
  50.         for f in os.listdir(dir):
  51.             if f.endswith('.xml'):
  52.                 engines[os.path.normcase(f)] = os.path.normcase(os.path.join(dir, f))
  53.                 continue
  54.     except OSError:
  55.         pass
  56.  
  57.     return engines
  58.  
  59.  
  60. def warn(file, message):
  61.     logging.warn('Error parsing searchengine: %s: %s', file, message)
  62.  
  63.  
  64. def loadSearchEngine(file):
  65.     
  66.     try:
  67.         dom = parse(file)
  68.         id = None
  69.         displayname = None
  70.         url = None
  71.         sort = None
  72.         root = dom.documentElement
  73.         for child in root.childNodes:
  74.             if child.nodeType == child.ELEMENT_NODE:
  75.                 tag = child.tagName
  76.                 text = child.childNodes[0].data
  77.                 if tag == 'id':
  78.                     if id != None:
  79.                         warn(file, 'Duplicated id tag')
  80.                         return None
  81.                     
  82.                     id = text
  83.                 elif tag == 'displayname':
  84.                     if displayname != None:
  85.                         warn(file, 'Duplicated displayname tag')
  86.                         return None
  87.                     
  88.                     displayname = text
  89.                 elif tag == 'url':
  90.                     if url != None:
  91.                         warn(file, 'Duplicated url tag')
  92.                         return None
  93.                     
  94.                     url = text
  95.                 elif tag == 'sort':
  96.                     if sort != None:
  97.                         warn(file, 'Duplicated sort tag')
  98.                         return None
  99.                     
  100.                     sort = float(text)
  101.                 else:
  102.                     warn(file, 'Unrecognized tag %s' % (tag,))
  103.                     return None
  104.             tag == 'id'
  105.         
  106.         dom.unlink()
  107.         if id == None:
  108.             warn(file, 'Missing id tag')
  109.             return None
  110.         
  111.         if displayname == None:
  112.             warn(file, 'Missing displayname tag')
  113.             return None
  114.         
  115.         if url == None:
  116.             warn(file, 'Missing url tag')
  117.             return None
  118.         
  119.         if sort == None:
  120.             sort = 0
  121.         
  122.         SearchEngine(id, displayname, url, sort)
  123.     except:
  124.         warn(file, 'Exception parsing file')
  125.  
  126.  
  127.  
  128. def createEngines():
  129.     deleteEngines()
  130.     searchEngines = searchForSearchEngines(resources.path('searchengines'))
  131.     searchEngines.update(searchForSearchEngines(os.path.join(config.get(prefs.SUPPORT_DIRECTORY), 'searchengines')))
  132.     for file in searchEngines.itervalues():
  133.         loadSearchEngine(file)
  134.     
  135.  
  136.  
  137. def getRequestURL(engineName, query, filterAdultContents = True, limit = 50):
  138.     if query == "LET'S TEST DTV'S CRASH REPORTER TODAY":
  139.         someVariable = intentionallyUndefinedVariableToTestCrashReporter
  140.     
  141.     if query == "LET'S DEBUG DTV: DUMP DATABASE":
  142.         import database
  143.         database.defaultDatabase.liveStorage.dumpDatabase(database.defaultDatabase)
  144.         return u''
  145.     
  146.     for engine in views.searchEngines:
  147.         if engine.name == engineName:
  148.             return engine.getRequestURL(query, filterAdultContents, limit)
  149.             continue
  150.     
  151.     return u''
  152.  
  153. getRequestURL = returnsUnicode(getRequestURL)
  154.  
  155. def getSearchEnginesHTML():
  156.     searchFeed = getSingletonDDBObject(views.feeds.filterWithIndex(indexes.feedsByURL, 'dtv:search'))
  157.     enginesHTML = u'<select name="engines" onChange="updateLastSearchEngine()">\n'
  158.     for engine in views.searchEngines:
  159.         enginesHTML += u'<option value="%s"' % (quoteattr(engine.name),)
  160.         if engine.name == searchFeed.lastEngine:
  161.             enginesHTML += u' selected="selected"'
  162.         
  163.         enginesHTML += u'>'
  164.         enginesHTML += escape(engine.title)
  165.         enginesHTML += u'</option>'
  166.     
  167.     enginesHTML += u'</select>'
  168.     return enginesHTML
  169.  
  170. getSearchEnginesHTML = returnsUnicode(getSearchEnginesHTML)
  171.  
  172. def getLastEngineTitle():
  173.     last = getLastEngine()
  174.     for engine in views.searchEngines:
  175.         if engine.name == last:
  176.             return engine.title
  177.             continue
  178.     
  179.     return u''
  180.  
  181.  
  182. def getLastEngine():
  183.     searchFeed = _getSearchFeed()
  184.     if not hasattr(searchFeed, 'lastEngine'):
  185.         return u'youtube'
  186.     
  187.     return searchFeed.lastEngine
  188.  
  189.  
  190. def getLastQuery():
  191.     searchFeed = _getSearchFeed()
  192.     if not hasattr(searchFeed, 'lastQuery'):
  193.         return ''
  194.     
  195.     return searchFeed.lastQuery
  196.  
  197.  
  198. def _getSearchFeed():
  199.     return getSingletonDDBObject(views.feeds.filterWithIndex(indexes.feedsByURL, 'dtv:search'))
  200.  
  201.